<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
  <meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8">
  <title></title>
<!-- $Id$ -->
  <meta name="GENERATOR" content="OpenOffice.org 1.1.2  (Linux)">
  <meta name="CREATED" content="20041128;11452700">
  <meta name="CHANGED" content="20041210;11524200">
  <style>
	<!--
		@page { size: 8.5in 11in; margin-left: 1.25in; margin-right: 1.25in; margin-top: 1in; margin-bottom: 1in }
		P { margin-bottom: 0.08in }
		H2.western { font-family: "Times New Roman", serif }
		H2.cjk { font-family: "Arial Unicode MS" }
		H2.ctl { font-family: "Tahoma" }
		H3.western { font-family: "Times New Roman", serif }
		H3.cjk { font-family: "Arial Unicode MS" }
		H3.ctl { font-family: "Tahoma" }
	-->
	</style>
</head>
<body dir="ltr" lang="en-US">
<h2 class="western" align="center">CIAO Static Configuration Support
with DanCE for Real-Time Platforms </h2>
<h3 class="western">1. Introduction</h3>
<p>The dynamic packaging, assembly, and deployment mechanisms
currently available in CIAO are useful for application domains where
component metadata is less likely to be known a priori, where
implementation upgrades may need to be performed on-line, and where
platform features like loading and unloading dynamic libraries are
both available and useful. We have already incorporated <a
 href="http://www.cs.wustl.edu/%7Eschmidt/ACE_wrappers/TAO/CIAO/docs/static_ciao_index.html">static
configuration support</a> for component configuration in CIAO on
platforms like VxWorks, as a set of optional strategies and
optimizations to the existing CIAO configuration capabilities (). In
this white paper, we discuss implementation details for extending the
static configuration capabilities as part of the new DanCE (D&amp;C
support available with CIAO) framework.</p>
<p>The fundamental intuition in understanding our approach is that in
DRE systems the stages of the overall system lifecycle are similar to
those in more dynamic conventional component-oriented client-server
applications.However, in DRE systems several phases of the system
lifecycle are compressed into the compile-time and
system-initialization phases, so that (1) for testing and
verification purposes the set of components in an application can be
identified and analyzed before run-time, and (2) overheads for
run-time operation following initialization are reduced and made more
predictable. Furthermore, due to the nuances of the platforms
traditionally used for deploying DRE systems, not all features of
conventional platforms are available. Our approach therefore avoids
certain mechanisms that are either unavailable or too costly in terms
of performance. We follow these intuitions in our approach, taking
the existing configuration phases in CIAO and pushing several of them
earlier in the configuration lifecycle.</p>
<h3 class="western">2. Current D&amp;C in CIAO with DanCE</h3>
<p><img src="imgs/dance_arch.jpg" name="Graphic2"
 style="border: 0px solid ; width: 600px; height: 400px;" alt=""
 align="left"><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br><b>Figure 1.</b> <b>Current D&amp;C process using DAnCE</b></p>
One of the key concerns while supporting the static configuration
within the DAnCE framework is to reuse the existing components in the
DAnCE framework as much as possible. Figure 1 shows the current D&amp;C
process using the DAnCE framework. This is the standard D&amp;C
process as specified in the CCM D&amp;C specification.As seen from
the figure, there are multiple processes (Executor, ExecutionManager,
NodeManagers and NodeApplications) that are involved.
<h3 class="western">3. Static Configuration with DanCE</h3>
<p><img src="imgs/static_dance_arch.jpg" name="Graphic3"
 style="border: 0px solid ; width: 800px; height: 800px;" alt=""
 align="left"><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br><b>Figure 2.</b> <b>Static D&amp;C in DAnCE</b></p>
<p>Figure 2 shows the static configuration approach in DAnCE. Here,
the flattened deployment plan (.cdp) is parsed offline by an offline
parser ($CIAO_ROOT/StaticConfigurator/StaticDAnCEParser) using the
same XML parser classes that the dynamic configuration uses. The
output of the parser is a C++ plan.h file, which contains the function
entry points for home and home servant creation. The assumption here
is that all the necessary (component implementations and other)
libraries are statically linked to the driver application (see a
template in
$CIAO_ROOT/DAnCE/StaticConfigurator/StaticDAnCEApp.cpp.tmpl). </p>
<p>The driver application is essentially a NodeManager which can be
used to do deployment just the same as in DAnCE. To achieve maximum
reusability of the existing classes in the DAnCE framework, we use
the class hierarchy shown in Figure 3. </p>
<br>
<b></b>
<p style="page-break-before: always;" align="left"><img
 src="imgs/static_dance_impl.jpg" name="Graphic1"
 style="border: 0px solid ; width: 700px; height: 700px;" alt=""
 align="left"><br clear="left">
<b>Figure 3. New class hierarchy to accommodate static configuration
within DAnCE<br>
</b></p>
<h3 class="western">3.Example</h3>
<p>To run the static version of Hello example, do the following,<br>
</p>
<ol>
  <li>Build ACE+TAO+CIAO statically</li>
  <li>Build $CIAO_ROOT/examples/Hello&nbsp;</li>
  <li>Generate the static function entrypoints (plan.h)<br>
    <span style="font-family: monospace;">&gt; cd
$CIAO_ROOT/examples/Hello/descriptors</span><span
 style="font-family: monospace;"><br>
&gt; <span style="font-family: &quot;times new roman&quot;,serif;"><span
 style="font-weight: bold;"></span></span>$CIAO_ROOT/DAnCE/StaticConfigurator/StaticDAnCEParser
-p flattened_deploymentplan_without_ns.cdp</span><br>
    <span style="font-family: monospace;">&gt; cp plan.h <span
 style="font-weight: bold;"></span>$CIAO_ROOT/DAnCE/StaticConfigurator/</span><br>
  </li>
  <li>Build the static NodeManager for Hello example<span
 style="font-family: monospace;"><br>
&gt; cd $CIAO_ROOT/DAnCE/StaticConfigurator</span><br
 style="font-family: monospace;">
    <span style="font-family: monospace;"></span><span
 style="font-family: monospace;">&gt; cp StaticDAnCEApp.cpp.tmpl
StaticDAnCEApp.cpp</span><br style="font-family: monospace;">
    <span style="font-family: monospace;">&gt; cp
StaticDAnCEApp.mpc.tmpl StaticDAnCEApp.mpc<br>
&gt; $ACE_ROOT/bin/mwc.pl<br>
&gt; make<br>
    </span></li>
  <li>Run the static node managers. Note that the <span
 style="font-family: monospace;">ORBEndpoint</span> values should
correspond to the ones in&nbsp;<span style="font-family: monospace;">
$CIAO_ROOT/examples/Hello/descriptors/TestNodeManagerMap.dat </span><br>
&gt; <span style="font-family: monospace;">cd
$CIAO_ROOT/DAnCE/StaticConfigurator<br>
&gt; ./StaticDAnCEApp -ORBEndpoint iiop://localhost:60001 &amp;<br>
    </span><span style="font-family: monospace;">&gt; ./StaticDAnCEApp
-ORBEndpoint iiop://localhost:60002 &amp;</span><br>
  </li>
  <li>Do the deployment. This is just the same as the non-static
version of DAnCE except that we have the NodeManagers already running
and need not spawn node managers. To accomplish this, change&nbsp; <span
 style="font-family: monospace;">$CIAO_ROOT/examples/Hello/descriptors/run_test_without_ns.pl
to <span style="font-weight: bold;">*not*</span> run the node manager
daemons.<br>
    </span><span style="font-family: monospace;">&gt; cd
$CIAO_ROOT/examples/Hello/descriptors<br>
&gt; ./</span><span style="font-family: monospace;">run_test_without_ns.pl</span></li>
</ol>
<br>
<p></p>
</body>
</html>
